Acceso a Base de datos repositorio JPA

Descripcion

Como realizar operaciones CRUD (Create, Read, Update, Delete) sobre una base de datos con Spring

Preparacion

Para hacer uso del Spring JPA primero necesitamos indicar las dependencias en el pom.xml

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

En este caso usaremos una base de datos H2 asi que indicamos la siguiente dependencia:

<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

En el archivo application.properties indicamos la siguiente configuracion para conectarnos a nuestra base de datos:

spring.datasource.url=jdbc:h2:~/personas.db
spring.datasource.driverClassName=org.h2.Driver
Implementacion

Para realizar la implementacion del acceso a una base de datos primero necesitamos crear un modelo de datos, que sera el equivalente a una tabla dentro de la base de datos con todos sus campos, para ello creamos una clase personas y aƱadimos los atributos que seran los campos que tendra en la base de datos, ademas debemos de incluir los getters y setters, un ejemplo seria el siguiente (archivo Persona.java):

package com.example.ApiRestExample;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.Table;

@Entity
@Table(name="PEOPLE")
public class Persona {

    @Id
    private Integer id;

    @Column(name="NAME")
    private String name;

    @Column(name="AGE")
    private Integer age;

    @Column(name="EYE_COLOR")
    private String eyeColor;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEyeColor() {
        return eyeColor;
    }

    public void setEyeColor(String eyeColor) {
        this.eyeColor = eyeColor;
    }



}

A continuacion necesitamos definir la interfaz del repositorio (archivo repositorio.java):

package com.example.ApiRestExample;

import org.springframework.data.repository.CrudRepository;

public interface Repositorio extends CrudRepository<Persona, Integer> {
}

Leer informacion de la Base de datos

A continuacion en el controlador incluimos el siguiente codigo:

@Autowired
Repositorio repositorio;

@GetMapping("/getDBInfo")
public String getDB(){
    Iterable<Persona> datos;
    String contenido = "";

    datos = repositorio.findAll();

    for(Persona i : datos){
        contenido += i.getName() + ", ";
    }

    return contenido;
}

Si revisamos el codigo lo primero que vemos es el Autowired esta anotacion permite realizar la carga de la clase del repositorio sin la necesidad de utilizar un constructor

Otro punto a tener en cuenta en el codigo es la llamada a findAll(), por defecto hay una serie de llamas que ya estan definidas en el repositorio, findAll es una de ellas, en este caso nos devuelve un objeto Iterable<Persona>, en este codigo simplemente cogemos el nombre de cada objeto y lo metemos en un string para devolverlo en la respuesta.

Spring nos permite utilizar una serie de funciones cuya funcionalidad depende del propio nombre de la funcion, Informacion consultas avanzadas>

Guardar informacion en la Base de datos

Para guardar informacion en la base de datos utilizamos la funcion save(), una vez ya tenemos establecido el modelo y el repositorio guardar informacion en la base de datos es muy simple:

@PostMapping("/postDBInfo")
public Persona postDBInfo(@RequestBody Persona persona){

    return repositorio.save(persona);
}

En este caso recibimos la informacion del objeto persona desde la solicitud y el propio spring la mapea dentro del objeto, despues solo tenemos que llamar a la funcion save() y spring realiza el guardado en la base de datos.

En el postman la solicitud seria:

Tags

Spring | Acceso a repositorio | Base de datos